#ifndef CORELIB_MATHLIB_IFUNCTION_H
#define CORELIB_MATHLIB_IFUNCTION_H
#include <string>
#include <memory>
#include <muparser/muParser.h>

namespace CoreLib {
    namespace MathLib {
        class IElement ;         
        class IFunction
        {
        public:
            IFunction(const std::string & eq="");
            ~IFunction();
            virtual void setEquation( const std::string &eq );
            std::string Equation() const ;
            virtual const IElement* eval(const IElement & x ) const = 0 ;
            virtual const IElement* operator()(const IElement & x ) const = 0 ;
        protected:
            std::auto_ptr<mu::Parser>      mp_Parser ; 
        };
    }

}
#endif // CORELIB_MATHLIB_IFUNCTION_H
